gl renderer: Unify viewport setting in add_offscreen_ops()
authorTimm Bäder <mail@baedert.org>
Sat, 12 Dec 2020 13:45:11 +0000 (14:45 +0100)
committerTimm Bäder <mail@baedert.org>
Wed, 16 Dec 2020 07:26:46 +0000 (08:26 +0100)
We use the same rect here a few times.

gsk/gl/gskglrenderer.c
gsk/gskroundedrectprivate.h

index 1731b7ca46350e53cab12e1d185a570983862536..0b7a45800c9c63c0816646116ed0a2284104078e 100644 (file)
@@ -3839,6 +3839,7 @@ add_offscreen_ops (GskGLRenderer         *self,
   int filter;
   GskTextureKey key;
   int cached_id;
+  graphene_rect_t viewport;
 
   if (node_is_invisible (child_node))
     {
@@ -3924,27 +3925,19 @@ add_offscreen_ops (GskGLRenderer         *self,
                                           render_target);
     }
 
-  init_projection_matrix (&item_proj,
-                          &GRAPHENE_RECT_INIT (
-                            bounds->origin.x * scale_x,
-                            bounds->origin.y * scale_y,
-                            width, height
-                         ));
+  viewport = GRAPHENE_RECT_INIT (bounds->origin.x * scale_x,
+                                 bounds->origin.y * scale_y,
+                                 width, height);
 
+  init_projection_matrix (&item_proj, &viewport);
   prev_render_target = ops_set_render_target (builder, render_target);
   /* Clear since we use this rendertarget for the first time */
   ops_begin (builder, OP_CLEAR);
   prev_projection = ops_set_projection (builder, &item_proj);
   ops_set_modelview (builder, gsk_transform_scale (NULL, scale_x, scale_y));
-  prev_viewport = ops_set_viewport (builder,
-                                    &GRAPHENE_RECT_INIT (bounds->origin.x * scale_x,
-                                                         bounds->origin.y * scale_y,
-                                                         width, height));
+  prev_viewport = ops_set_viewport (builder, &viewport);
   if (flags & RESET_CLIP)
-    ops_push_clip (builder,
-                   &GSK_ROUNDED_RECT_INIT (bounds->origin.x * scale_x,
-                                           bounds->origin.y * scale_y,
-                                           width, height));
+    ops_push_clip (builder, &GSK_ROUNDED_RECT_INIT_FROM_RECT (viewport));
 
   builder->dx = 0;
   builder->dy = 0;
index 5c2912b492a9ce09b3471879c86c935aab799775..bddd4ea18c626a7531fa804b7233dcbe2917ee83 100644 (file)
@@ -7,6 +7,16 @@
 
 G_BEGIN_DECLS
 
+#define GSK_ROUNDED_RECT_INIT_FROM_RECT(_r)   \
+  (GskRoundedRect) { .bounds = _r, \
+                     .corner = { \
+                        GRAPHENE_SIZE_INIT(0, 0),\
+                        GRAPHENE_SIZE_INIT(0, 0),\
+                        GRAPHENE_SIZE_INIT(0, 0),\
+                        GRAPHENE_SIZE_INIT(0, 0),\
+                     }}
+
+
 gboolean                 gsk_rounded_rect_is_circular           (const GskRoundedRect     *self);
 
 void                     gsk_rounded_rect_path                  (const GskRoundedRect     *self,